package Creational.FactoryMethod.second;

import Creational.FactoryMethod.product.ConsoleLogger;
import Creational.FactoryMethod.product.FileLogger;
import Creational.FactoryMethod.product.Logger;

/**被创建的对象称为“产品”，把创建产品的对象称为“工厂”。
 * 工厂方法的第二种情况：其实是简单工厂方法
 * 具体工厂：一个具体的类而且为工厂方法提供一个缺省的实现。
 *还有一种情况是定义一个缺省实现的抽象类，但不常见。
 *
 * 产品创建的过程预先定义，无法更改
 * 适合产品种类固定的情况，如果要增加产品种类，需要修改工厂方法的代码。
 * 可采用一个标识要被创建的对象种类的参数，来决定创建哪种产品。
 * 也可以不采用参数，而采用配置文件或数据库来决定创建哪种产品。
 *
 * 客户需要提供产品标识
 */
public class LoggerFactory {

    public Logger getLogger(String id){
        if("console".equals(id)){
            return new ConsoleLogger();
        }else {
            return new FileLogger();
        }
    }

//    菜鸟教程的抽象工厂案例采用第二种情况实现
//    public class ShapeFactory {
//
//        //使用 getShape 方法获取形状类型的对象
//        public Shape getShape(String shapeType){
//            if(shapeType == null){
//                return null;
//            }
//            if(shapeType.equalsIgnoreCase("CIRCLE")){
//                return new Circle();
//            } else if(shapeType.equalsIgnoreCase("RECTANGLE")){
//                return new Rectangle();
//            } else if(shapeType.equalsIgnoreCase("SQUARE")){
//                return new Square();
//            }
//            return null;
//        }
//    }
}
